const { Controller } = require('egg');

class ScoreController extends Controller {
    /**
     * 新增
     */
    async create() {
        // 解构参数
        const { uid, theory, skill } = this.ctx.request.body;
        // 校验参数
        if (isNaN(uid) || isNaN(theory) || isNaN(skill)) {
            this.ctx.body = {
                code: 400,
                message: '部分参数无效',
            };
            return;
        }
        // 如果今天已录入成绩，不能重复录入
        let score = await this.service.score.readByToday(uid);
        if (score) {
            this.ctx.body = {
                code: 403,
                message: '该学生今日成绩已录入',
            };
            return;
        }
        // 存入数据库
        let res = await this.service.score.create({
            uid,
            theory,
            skill,
        });
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: '成绩录入失败，请稍后再试',
            };
            return;
        }
        // 返回成功响应
        this.ctx.body = {
            code: 201,
            message: '成绩录入成功',
        };
    }

    /**
     * 列表
     */
    async index() {
        // 传入 GET 请求参数，进行条件查询
        let res = await this.service.score.readListByQuery(
            this.ctx.request.query,
        );
        // 返回查询的数据
        this.ctx.body = {
            code: 200,
            data: res,
            message: '获取成绩列表成功',
        };
    }

    /**
     * 更新
     */
    async update() {
        // 解构路径参数
        const { id } = this.ctx.params;
        // 解构请求体参数
        const { theory, skill } = this.ctx.request.body;
        if (!id) {
            throwRE(40001, '缺少唯一标识 id');
        }
        // 更新
        const res = await this.service.score.update({ id, theory, skill });

        // 返回响应
        if (res.affectedRows !== 1) {
            this.ctx.throwRE(40001, '更新失败');
        }
        this.ctx.success('', '更新成功');
    }

    /**
     * 删除
     */
    async destroy() {
        // 解构参数
        const { id } = this.ctx.params;
        if (!id) {
            this.ctx.throwRE(40001, '无法解析 id 参数');
        }
        console.log('id', id);
        // 删除
        await this.service.score.deleteById(id);
        // 响应成功
        this.ctx.success('', '删除成功');
    }
}

module.exports = ScoreController;
